/**
 * 
 */
package projeto.administrativo.atividade.cdp;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToMany;
import javax.persistence.OrderBy;

import nucleo.comuns.util.UtilitarioSerializacao;
import plataforma.base.cdp.IObjetoAtivoInativo;
import plataforma.base.cdp.ObjetoPersistente;
import projeto.administrativo.checklist.cdp.KChecklist;
import projeto.comercial.funcaoservico.cdp.FuncaoServico;

/**
 * @author mike
 * 
 */
@Entity
public class KAtividade extends ObjetoPersistente implements
		IObjetoAtivoInativo {

	/**
	 * 
	 */
	private static final long serialVersionUID = UtilitarioSerializacao
			.getIDSerializacao();
	private boolean ativo;
	private String descricao;
	private Set<KChecklist> listaKChecklist = new HashSet<KChecklist>();
	private Set<FuncaoServico> funcoes = new HashSet<FuncaoServico>();

	public KAtividade() {
		this.ativo = true;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see plataforma.base.cdp.IObjetoAtivoInativo#isAtivo()
	 */
	@Override
	@Column(columnDefinition = "boolean default false")
	public boolean isAtivo() {
		return this.ativo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see plataforma.base.cdp.IObjetoAtivoInativo#setAtivo(boolean)
	 */
	@Override
	public void setAtivo(boolean isAtivo) {
		this.ativo = isAtivo;
	}

	/**
	 * @return the descricao
	 */
	@Column(unique = true, nullable = false)
	public String getDescricao() {
		return descricao;
	}

	/**
	 * @param descricao
	 *            the descricao to set
	 */
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	/**
	 * @return the listaKChecklist
	 */
	@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.REFRESH,
			CascadeType.REMOVE }, fetch = FetchType.LAZY)
	@OrderBy(value = "descricao")
	public Set<KChecklist> getListaKChecklist() {
		return listaKChecklist;
	}

	/**
	 * @param listaKChecklist
	 *            the listaKChecklist to set
	 */
	public void setListaKChecklist(Set<KChecklist> listaKChecklist) {
		this.listaKChecklist = listaKChecklist;
	}


	/**
	 * @return the funcoes
	 */
	@ManyToMany(cascade = { CascadeType.MERGE, CascadeType.REFRESH,
			CascadeType.REMOVE }, fetch = FetchType.LAZY)
	@OrderBy(value = "descricao")
	public Set<FuncaoServico> getFuncoes() {
		return funcoes;
	}

	/**
	 * @param funcoes
	 *            the funcoes to set
	 */
	public void setFuncoes(Set<FuncaoServico> funcoes) {
		this.funcoes = funcoes;
	}

}
